#ifndef DOUBLY_LINKED_LIST_H
#define DOUBLY_LINKED_LIST_H

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
typedef struct Node {
    void* data;           // 使用void指针以支持任意数据类型
    struct Node* prev;    // 前驱节点指针
    struct Node* next;    // 后继节点指针
} Node;

// 定义链表结构
typedef struct {
    Node* head;          // 头节点指针
    Node* tail;          // 尾节点指针
    size_t size;         // 链表大小
} DoublyLinkedList;

// 函数声明
DoublyLinkedList* createList();                         // 创建链表
void destroyList(DoublyLinkedList* list);              // 销毁链表
void insertFront(DoublyLinkedList* list, void* data);  // 在头部插入节点
void insertBack(DoublyLinkedList* list, void* data);   // 在尾部插入节点
void removeFront(DoublyLinkedList* list);              // 删除头部节点
void removeBack(DoublyLinkedList* list);               // 删除尾部节点
void* getFront(DoublyLinkedList* list);                // 获取头部数据
void* getBack(DoublyLinkedList* list);                 // 获取尾部数据
size_t getSize(DoublyLinkedList* list);                // 获取链表大小

#endif // DOUBLY_LINKED_LIST_H 